=========================================
Tutorial
- Display de HP numérico
by Cuauthemoc
[cuauthemoc@bol.com.br]
based on design of The Naughty Crusty
[thenaughtycrusty@terra.com.br]
=========================================
E aí, lôko? Beleza?? Este é meu primeiro tuto, coisa que eu nem imaginava em fazer! Mas taí,.. Neste tutorial eu vou mostrar como mostrar o HP ou MP na tela em forma de número. Aquele tuto no Crusty de Mostrar a Barra de HP me inspirou a fazer este, e agradeço a ele por isso: Naughty Crusty!! Valeu Kara!!!! Grande tutorial! Ah! E valeu pelo layout... ele deveria ser usado por todo mundo que faz tutos, pois é ótimo pra isso...
:: Primeiro Passo - Criando os Números ::
Para esse evento serão necessárias imagens! Você pode criar suas próprias imagens se preferir, mas se for preguiçoso, como muitos costumam dizer; eu anexei as imagens necessárias. Assim basta que você transporte-as para seu devido lugar.
Para cada número foi criada uma imagem, e foi criada ainda uma imagem extra, que será usada como separador, que será útil mais à frente... Você pode copiá-las para a pasta 'Pictures' dentro do seu projeto, ou dentro do RPT. Tanto faz... Vamos agora ao 2º Passo!
:: Segundo Passo - Programando ::
Se você já jogou Vagrant Story (RPG da antiga Squaresoft e atual Square-Enix para PSX) deve ter visto que a durante a maior parte do jogo o HP e MP do herói Ashley Riot são exibidos na forma numérica e como barra de energia. Da mesma forma, se você tem aí o tuto do Crusty 'HP Bar' poderá juntar com esse tuto e fazer o mesmo. Ficaria muito lôko...
Agora abra o Database e crie um Common Event (ou Evento Comum para o RM2K BR) chamado (SeuHerói)HP e deixe o Event Start Condition (Condição de Início) em Parallel Process (Processo Paralelo). Se você quiser (eu recomendo que queira :P), pode criar um Switch Condicional de Disparo (ao lado da Condição de Início), chamado 'HPDisplayOnOff', para momentos em que você queira esconder o HP do truta...
Agora na Lista de Comandos , iremos inserir a 'massa' do código. Mas primeiro vamos entender como os cálculos serão feitos, e qual o objetivo desses cálculos.
Hero HP = 8473
Milhares -> 8000
Centenas -> 400
Dezenas -> 70
Unidades -> 3
Como você pode ver no exemplo ao lado, o numeral é dividido em 4 casas: dos Milhares, das Centenas, das Dezenas e Unidades, certo? O objetivo dos cálculos é conseguir esses números. 'Mas como??' Ah... Que bom que você perguntou...
Para achar esses números precisaremos de 10 variáveis, e não pense que é muito, pois poderia ser mais... Você pode criar todas de uma vez na lista de variáveis para adiantar o processo. Elas são: HeroA-HP, HPDiv1 , HPDiv2, HPDiv3 , HPMlt1, HPMlt2 , CasaMil, CasaCen , CasaDez e CasaUni.
Para começar vá em Mudar Variável e deixe HeroA-HP>Setar>Hero(Seu Herói)>HP. Aqui definimos a variável HeroA-HP equivalente ao HP do seu Herói. Agora vamos copiar o seu valor para a variável HPDiv1, que ficará assim: Mudar Variável HPDiv1>Setar>Variável>HeroA-HP. Isso se deve ao fato que que a variável HPDiv1 será usada para a 1ª divisão. Agora vá em Mudar Variável e deixei HPDiv1>Operador'/'>Setar>1000. Nós dividimos a var. HPDiv1 por 1000, agora vamos multiplicá-la por 1000 para achar o primeiro valor: CasaMil. Veja: Mudar Variável CasaMil>Setar>Variável>HPDiv1 e então Mudar Variável CasaMil>Operador'*'>Setar>1000. OK... primeira variável encontrada.

Bom, a primeira var. foi fácil de achar. Agora serão necessários alguns cálculos a mais para as outras. Chega de conversa e continuemos: Mudar Variável HPDiv2>Setar>Variável>HeroA-HP. E: Mudar Variável HPDiv2>Operador'/'>Setar>100. Tem mais: Mudar Variável HPMlt1>Setar>Variável>HPDiv2. E essa: Mudar Variável HPMlt1>Operador'*'>Setar>100. Ufa... O processo foi quase igual ao anterior, ou seja, pegamos a var. HeroA-HP, copiamos seu valor para outra var., dividimos por 100 e multiplicamos novamente por 100, mas o seu resultado não nos deu o 2º. valor. Precisamos de mais contas!!!
Prenda a respiração que lá vai mais: Mudar Variável HeroA-HP>Setar>Variável>HPDiv3. Depois vem: Mudar variável HPDiv3>Operador'/'>Setar>10. Em seguida: Mudar variável HPMlt2>Setar>Variável>HPDiv3. Enfim: Mudar Variável HPMlt2>Operador'*'>Setar>10. De novo o mesmo processo: copiar, dividir e depois multiplicar por 10. Ainda não temos o 2º valor. Mas agora chega! Estes serão os últimos cálculos, nós finalmente teremos os 3 valores restantes na mão (não exatamente na mão...).

Here we go!! Um: Mudar variável CasaCen>Setar>Variável>HPMlt1. Dois: Mudar Variável CasaCen>Operador'-'>Variável>CasaMil. Valor 2 encontrado. Mantenha o pique: Mudar Variável CasaDez>Setar>Variável>HPMlt2. E: Mudar Variável CasaDez>Operador'-'>Variável>HPMlt1. Valor 3 encontrado. E: Mudar Variável CasaUni>Setar>Variável>HeroA-HP. Enfim: Mudar Variável CasaUni>Operador'-'>Variável>HPMlt2. Há! Valor 4 encontrado! Para você entender os cálculos, veja o exemplo abaixo:
HeroA-HP = (Seu herói)HP
HPDiv1 = HeroA-HP
HPDiv1 / 1000
CasaMil = HPDiv1
CasaMil * 1000
HPDiv2 = HeroA-HP
HPDiv2 / 100
HPMlt1 = HPDiv2
HPMlt1 * 100
HPDiv3 = HeroA-HP
HPDiv3 / 10
HPMlt2 = HPDiv3
HPMlt2 * 10
CasaCen = HPMlt1
CasaCen - CasaMil
CasaDez = HPMlt2
CasaDez - HPMlt1
CasaUni = HeroA-HP
CasaUni - HPMlt
0 = 8473
0 = 8473
8473 / 1000 = 8
0 = 8
8 * 1000 = 8000
0 = 8473
8473 / 100 = 84
0 = 84
84 * 100 = 8400
0 = 8473
8473 / 10 = 847
0 = 847
847 * 10 = 8470
0 = 8400
8400 - 8000 = 400
0 = 8470
8470 - 8400 = 70
0 = 8473
8473 - 8470 = 3
Como você pode ver, aqui está o código do cálculo, e ao lado um exemplo. Nesse exemplo foi suposto que o Herói tenha o HP atual igual a 8473, e a partir desse valor, todos os outros foram encontrados.
Essa foi a parte fácil. O trampo vem agora...
Agora que nó já temos todos os valores necessários, precisaremos de alguns Fork Conditions, alguns Show e Erase Picture e... Catapimba! Se você tá cansado, vá dormir um pouco, por que essa parte realmente... É MUUUIITO CHATA!!

Agora chega de preguiça e vamofazêessinegóciu:
Pra começar deixa eu explicar o processo. Serão necessários 40 Fork Conditions, 10 para cada variável, divididos em grupos de 4. Sacou? É assim:
<>Nota: -------------------------------------------
<>IF - THEN:Var[####:CasaMil] - 0
  <>Deletar Picture: 1
  <>
:FIM Caso
<>IF - THEN:Var[####:HeroA-HP] 1000 - menor que
  <>Deletar Picture: 2
  <>
Exceção - ELSE
  <>Mostrar Picture: 2, (número0), (40,16)
  <>
:FIM Caso
<>IF - THEN:Var[####:HeroA-HP] 100 - menor que
  <>Deletar Picture: 3
  <>
exceção - ELSE
  <>Mostrar Picture: 3, (número0), (48,16)
  <>
:FIM Caso
IF - THEN:Var[####:CasaUni] - 0
  <>Mostrar Picture: 4, (número0), (56,16)
  <>
:FIM Caso
<>Nota: -------------------------------------------
Use comentários para separar os grupos. Assim você não se perde em meio ao código.
Fork para CasaMil. Se CasaMil for igual 0:
Remove a figura 1 que fica na pos. 32x16.

Fim do caso.
Fork para CasaCen usando a var. HeroA-HP. Se o HP do Herói for menor que 1000:
Remove a figura 2 que fica na pos. 40x16.

Mas se o HP for igual ou maior que 1000:
Mostra a figura 2 que fica na pos. 40x16

Fim do caso.
Fork para CasaDez usando a var. HeroA-HP. Se o HP do Herói for menor que 100:
Remove a figura 3 que fica na pos. 48x16

Mas se o HP for igual ou maior que 100:
Mostra a figura 3 que fica na pos. 48x16

Fim do caso.
Fork para CasaUni. Se a var. CasaUni for igual a 0:
Mostra a figura 4 que fica na pos. 56x16

Fim do caso.
Mas uma vez os comentários para separar os grupos. Sempre use comentários...
O grupo de forks acima é um grupo especial em relação aos outros, pois ele verifica quando pôr ou remover o zero nos números. Evita que o Display indique, por exemplo, 0945 ao invés de 945. Para TODOS os grupos de forks segue uma regra básica, e você deve ter cuidado para não confundir ou errar. Como você pode ver acima na seqüência de forks, o primeiro fork é relacionado à casa dos milhares e a figura 1. O segundo é da casa das centenas e da figura 2 (Não esqueça de ajustar as coordenadas de posição). O terceiro é da casa das dezenas e da figura 3; e finalmente o quarto é lugar onde se dorme... hã... quer dizer, o quarto é da casa das unidades e da figura 4. Daí coloca-se um comentário, como visto acima e começa tudo de novo. Bom, não deve ser difícil, pois ninguém aqui é burro...
<>Nota: -------------------------------------------
<>IF - THEN:Var[####:CasaMil] - 1000
  <>Mostrar Picture: 1(número1), (32,16)
  <>
:FIM Caso
<>IF - THEN:Var[####:CasaCen] - 100
  <>Mostrar Picture: 2, (número1), (40,16)
  <>
:FIM Caso
<>IF - THEN:Var[####:CasaDez] 10
  <>Mostrar Picture: 3, (número1), (48,16)
  <>
:FIM Caso
IF - THEN:Var[####:CasaUni] - 1
  <>Mostrar Picture: 4, (número1), (56,16)
  <>
:FIM Caso
<>Nota: -------------------------------------------
Comentário...
1º Fork, para CasaMil. Se CasaMil for igual a 1000:
Mostra a figura 1, de nome '(número1)' na posição 32x16.
...
Fim do Caso.
2º Fork, para CasaCen. Se CasaCen for igual a 100:
Mostra a figura 2, de nome '(número1)' na posição 40x16.
...
Fim do Caso.
3º Fork, para CasaDez. Se CasaDez for igual a 10:
Mostra a figura 3, de nome '(número1)' na posição 48x16.
...
Fim do Caso.
4º Fork, para CasaUni. Se CasaUni for igual a 1:
Mostra a figura 4, de nome '(número1)' na posição 56x16.
...
Fim do Caso.
Comentário para separar o grupo...
Este grupo de forks é uma exemplo perfeito de como todos os demais deverão ser feitos. Repare nos destaques coloridos as partes que requerem mais atenção. Em amarelo está a parte mais fácil de se ajustar, pois basta trocar os valores (em CasaMil,1000 por 2000, depois 3000...; em CasaCen, 100 por 200, depois 300...). Da mesma forma que o destaque verde: muda-se o número de um grupo para outro. O número da figura (laranja) e a posição da imagem requerem mais atenção...
:: Finalizando - O Cógigo::

- Nome:
(SeuHerói)HP Display
- Condição de Início: Processo Paralelo
- Switch Condicional de Disparo: HPDisplayOnOff
- Comandos:

<>Variável: [####:HeroHP]Set , SeuHéroi HP
<>Variável: [####:HPDiv1]Set , Var [####:HeroHP]val.
<>Variável: [####:HPDiv1]/ , 1000
<>Variável: [####:CasaMil]Set , Var [####:HPDiv1]val.
<>Variável: [####:CasaMil]* , 1000
<>Variável: [####:HPDiv2]Set , Var [####:HeroHP]val.
<>Variável: [####:HPDiv2]/ , 100
<>Variável: [####:HPMlt1]Set , Var [####:HPDiv2]val.
<>Variável: [####:HPMlt1]* , 100
<>Variável: [####:HPDiv3]Set , Var [####:HeroHP]val.
<>Variável: [####:HPDiv3]/ , 10
<>Variável: [####:HPMlt2]Set , Var [####:HPDiv3]val.
<>Variável: [####:HPMlt2]* , 10
<>Variável: [####:CasaCen]Set , Var [####:HPMlt1]val.
<>Variável: [####:CasaCen]- , Var [####:CasaMil]val.
<>Variável: [####:CasaDez]Set, Var [####:HPMlt2]val.
<>Variável: [####:CasaDez]- , Var [####:HPMlt1]val.
<>Variável: [####:CasaUni]Set , Var [####:HeroHP]val.
<>Variável: [####:CasaUni]- , Var [####:HPMlt2]val.
Nota: -----------------------------------------------------------------------
<>Nota: -------------------------------------------
<>IF - THEN:Var[####:CasaMil] - 0
  <>Deletar Picture: 1
  <>
:FIM Caso
<>IF - THEN:Var[####:HeroA-HP] 1000 - menor que
  <>Deletar Picture: 2
  <>
Exceção - ELSE
  <>Mostrar Picture: 2, (número0), (40,16)
  <>
:FIM Caso
<>IF - THEN:Var[####:HeroA-HP] 100 - menor que
  <>Deletar Picture: 3
  <>
exceção - ELSE
  <>Mostrar Picture: 3, (número0), (48,16)
  <>
:FIM Caso
IF - THEN:Var[####:CasaUni] - 0
  <>Mostrar Picture: 4, (número0), (56,16)
  <>
:FIM Caso
<>Nota: -------------------------------------------
<>IF - THEN:Var[####:CasaMil] - 1000
  <>Mostrar Picture: 1, (número1), (32,16)
  <>
:FIM Caso
<>IF - THEN:Var[####:CasaCen] - 100
  <>Mostrar Picture: 2, (número1), (40,16)
  <>
:FIM Caso
<>IF - THEN:Var[####:CasaDez] 10
  <>Mostrar Picture: 3, (número1), (48,16)
  <>
:FIM Caso
IF - THEN:Var[####:CasaUni] - 1
  <>Mostrar Picture: 4, (número1), (56,16)
  <>
:FIM Caso
<>Nota: -------------------------------------------
<>IF - THEN:Var[####:CasaMil] - 2000
  <>Mostrar Picture: 1, (número2), (32,16)
  <>
:FIM Caso
<>IF - THEN:Var[####:CasaCen] - 200
  <>Mostrar Picture: 2, (número2), (40,16)
  <>
:FIM Caso
<>IF - THEN:Var[####:CasaDez] 20
  <>Mostrar Picture: 3, (número2), (48,16)
  <>
:FIM Caso
IF - THEN:Var[####:CasaUni] - 2
  <>Mostrar Picture: 4, (número2), (56,16)
  <>
:FIM Caso
<>Nota: -------------------------------------------
<>IF - THEN:Var[####:CasaMil] - 3000
  <>Mostrar Picture: 1, (número3), (32,16)
  <>
:FIM Caso
<>IF - THEN:Var[####:CasaCen] - 300
  <>Mostrar Picture: 2, (número3), (40,16)
  <>
:FIM Caso
<>IF - THEN:Var[####:CasaDez] 30
  <>Mostrar Picture: 3, (número3), (48,16)
  <>
:FIM Caso
IF - THEN:Var[####:CasaUni] - 3
  <>Mostrar Picture: 4, (número3), (56,16)
  <>
:FIM Caso
<>Nota: -------------------------------------------
<>IF - THEN:Var[####:CasaMil] - 4000
  <>Mostrar Picture: 1, (número4), (32,16)
  <>
:FIM Caso
<>IF - THEN:Var[####:CasaCen] - 400
  <>Mostrar Picture: 2, (número4), (40,16)
  <>
:FIM Caso
<>IF - THEN:Var[####:CasaDez] 40
  <>Mostrar Picture: 3, (número4), (48,16)
  <>
:FIM Caso
IF - THEN:Var[####:CasaUni] - 4
  <>Mostrar Picture: 4, (número4), (56,16)
  <>
:FIM Caso
<>Nota: -------------------------------------------
<>IF - THEN:Var[####:CasaMil] - 5000
  <>Mostrar Picture: 1, (número5), (32,16)
  <>
:FIM Caso
<>IF - THEN:Var[####:CasaCen] - 500
  <>Mostrar Picture: 2, (número5), (40,16)
  <>
:FIM Caso
<>IF - THEN:Var[####:CasaDez] 50
  <>Mostrar Picture: 3, (número5), (48,16)
  <>
:FIM Caso
IF - THEN:Var[####:CasaUni] - 5
  <>Mostrar Picture: 4, (número5), (56,16)
  <>
:FIM Caso
<>Nota: -------------------------------------------
<>IF - THEN:Var[####:CasaMil] - 6000
  <>Mostrar Picture: 1, (número6), (32,16)
  <>
:FIM Caso
<>IF - THEN:Var[####:CasaCen] - 600
  <>Mostrar Picture: 2, (número6), (40,16)
  <>
:FIM Caso
<>IF - THEN:Var[####:CasaDez] 60
  <>Mostrar Picture: 3, (número6), (48,16)
  <>
:FIM Caso
IF - THEN:Var[####:CasaUni] - 6
  <>Mostrar Picture: 4, (número6), (56,16)
  <>
:FIM Caso
<>Nota: -------------------------------------------
<>IF - THEN:Var[####:CasaMil] - 7000
  <>Mostrar Picture: 1, (número7), (32,16)
  <>
:FIM Caso
<>IF - THEN:Var[####:CasaCen] - 700
  <>Mostrar Picture: 2, (número7), (40,16)
  <>
:FIM Caso
<>IF - THEN:Var[####:CasaDez] 70
  <>Mostrar Picture: 3, (número7), (48,16)
  <>
:FIM Caso
IF - THEN:Var[####:CasaUni] - 7
  <>Mostrar Picture: 4, (número7), (56,16)
  <>
:FIM Caso
<>Nota: -------------------------------------------
<>IF - THEN:Var[####:CasaMil] - 8000
  <>Mostrar Picture: 1, (número8), (32,16)
  <>
:FIM Caso
<>IF - THEN:Var[####:CasaCen] - 800
  <>Mostrar Picture: 2, (número8), (40,16)
  <>
:FIM Caso
<>IF - THEN:Var[####:CasaDez] 80
  <>Mostrar Picture: 3, (número8), (48,16)
  <>
:FIM Caso
IF - THEN:Var[####:CasaUni] - 8
  <>Mostrar Picture: 4, (número8), (56,16)
  <>
:FIM Caso
<>Nota: -------------------------------------------
<>IF - THEN:Var[####:CasaMil] - 9000
  <>Mostrar Picture: 1, (número9), (32,16)
  <>
:FIM Caso
<>IF - THEN:Var[####:CasaCen] - 900
  <>Mostrar Picture: 2, (número9), (40,16)
  <>
:FIM Caso
<>IF - THEN:Var[####:CasaDez] 90
  <>Mostrar Picture: 3, (número9), (48,16)
  <>
:FIM Caso
IF - THEN:Var[####:CasaUni] - 9
  <>Mostrar Picture: 4, (número9), (56,16)
  <>
:FIM Caso
<>Nota: -------------------------------------------
Esperar: 0.6sg
<>

 

No fim do código foi adicionado um comando de espera, para que não haja travamento no movimento do chara no mapa. Logicamente vai causar uma breve demora na atualização do HP no Display, mas não é nada. Agora que você entendeu o processo por completo, poderá fazer outro evento desse, só que com o HP máximo do seu Herói. Mas pra isso você vai precisar de outras 10 variáveis. Eu bolei os nomes delas pra agilizar o processo: HeroMaxHP, MaxHPDiv1, MaxHPDiv2, MaxHPDiv3, MaxHPMlt1, MaxHPMlt2, MaxCasaMil, MaxCasaCen, MaxCasaDez e MaxCasaUni.  Mas tome cuidado com a posição das imagens. Veja:
Picture Nº: 1 2 3 4 9 5 6 7 8
Pos. X 32 40 48 56 64 72 80 88 96
A Picture no. 9 corresponde ao separador dos dois Displays. Você ajusta as coordenadas como preferir, entretanto, caso faça suas próprias figuras, evite faze-las maiores que 16x16 píxel, pois elas ocuparão um espaço considerável na tela. A partir daí entenda que um Display para cada personagem seria desnecessário. Ao invés disso você poderia usar uma HPBar (Tuto do Crusty) para cada personagem, ou então um HP Display com a HPBar. Ficaria melhor, mas decisão final é sua.
Qualquer dúvida, sugestão ou colaboração, mande-me um e-mail em cuauthemoc@bol.com.br ... Este Tutorial é de livre distribuição, usem como quiser, desde que seja mantida a sua integridade... Se for usá-lo no seu projeto, coloque me nos créditos, pois isso me incentiva a criar novos tutoriais... Espero que tenham gostado!!